home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / bc7free.zip / FREE.BAS < prev    next >
BASIC Source File  |  1990-03-26  |  2KB  |  71 lines

  1.  
  2.   ' Free.Bas  03-25-90   T.E.M.  Use Interrupt under BC 7.x
  3.   ' --------  Remember to invoke QBX fn /lQBX   <-- Note !
  4.  
  5.   '$INCLUDE: 'QBX.BI'
  6.    DIM Regs AS RegType
  7.  
  8. Begin:
  9.    Clen% = LEN(COMMAND$)
  10.    IF Clen% > 1 THEN GOTO DoCmdTail
  11.  
  12. DoDefaultDriveOnly:
  13.    Regs.ax = &H1900             ' Current drv info: DOS service 19
  14.    Interrupt &H21, Regs, Regs
  15.    Q.Drive$ = CHR$((Regs.ax AND &HFF) + 65) + ":"
  16.    GOSUB Q.GetDiskInfo
  17.    GOSUB Q.ReportDiskInfo
  18.    SYSTEM
  19.  
  20. DoCmdTail:
  21.    FOR Temp% = 1 TO Clen%
  22.      C$ = MID$(COMMAND$, Temp%, 1)
  23.      DriveLetter% = INSTR("ABCDEFGHIJKLMNOPQRSTUVWXYZ", C$)
  24.      IF DriveLetter% > 0 THEN
  25.     Q.Drive$ = C$
  26.     GOSUB Q.GetDiskInfo
  27.     GOSUB Q.ReportDiskInfo
  28.      END IF
  29.    NEXT Temp%
  30.    SYSTEM
  31.  
  32. Q.GetDiskInfo:
  33.    Regs.ax = &H3600   ' Get Q.Drive$ free disk space
  34.    Regs.dx = ASC(UCASE$(Q.Drive$)) - 64
  35.    Interrupt &H21, Regs, Regs
  36.    Q.BytesPersector% = Regs.cx
  37.    Q.SectorsPerCluster% = Regs.ax
  38.    IF Regs.dx >= 0 THEN
  39.     Q.ClustersTotal% = Regs.dx
  40.    ELSE Q.ClustersTotal% = (Regs.dx + 65536)
  41.    END IF
  42.  
  43.    IF Regs.dx >= 0 THEN
  44.     Q.ClustersAvail% = Regs.bx
  45.    ELSE Q.ClustersAvail% = (Regs.bx + 65536)
  46.    END IF
  47.  
  48.    Q.ClustersAvail& = ABS(Q.ClustersAvail%)  ' Convert to Long Integer
  49.    Q.ClustersTotal& = ABS(Q.ClustersTotal%)
  50.    Q.BytesPersector& = ABS(Q.BytesPersector%)
  51.    Q.SectorsPerCluster& = ABS(Q.SectorsPerCluster%)
  52.  
  53.    Temp& = (Q.BytesPersector& * Q.SectorsPerCluster&)
  54.    Q.FreeSpace& = (Temp& * Q.ClustersAvail&)
  55.    Q.TotalSpace& = (Temp& * Q.ClustersTotal&)
  56.  
  57.    Q.FreePct& = ((Q.ClustersAvail& * 100) \ Q.ClustersTotal&)
  58.  
  59.    RETURN
  60.   '------
  61.  
  62. Q.ReportDiskInfo:
  63.    PRINT "Drive "; Q.Drive$; " has ";
  64.    PRINT USING "###,###,###"; Q.FreeSpace&;
  65.    PRINT " bytes free (";
  66.    PRINT USING "###"; Q.FreePct&;
  67.    PRINT " %)"
  68.    RETURN
  69.   '------
  70.  
  71.